package org.lora.quartz;

import java.text.ParseException;
import java.util.Set;
import java.util.StringTokenizer;

import org.quartz.CronExpression;

/**
 * <p>
 * 类名:CronExpressionEx
 * </p>
 * 描述:cron表达式解析器。<br>
 * 创建时间:2016年11月9日 下午5:05:31<br>
 * 
 * @author Bladnir@outlook.com<br>
 *         修改历史:<br>
 *         2016年11月9日 Bladnir 创建<br>
 */
public class CronExpressionEx extends CronExpression {

	private static final long serialVersionUID = 1L;

	private String secondsExp;
	private String minutesExp;
	private String hoursExp;
	private String daysOfMonthExp;
	private String monthsExp;
	private String daysOfWeekExp;

	/**
	 * cron解析器构造函数
	 * 
	 * @param cronExpression
	 *            cron表达式
	 * @throws ParseException
	 *             解析异常
	 */
	public CronExpressionEx(String cronExpression) throws ParseException {
		super(cronExpression);

		StringTokenizer exprsTok = new StringTokenizer(cronExpression, " \t", false);
		secondsExp = exprsTok.nextToken().trim();
		minutesExp = exprsTok.nextToken().trim();
		hoursExp = exprsTok.nextToken().trim();
		daysOfMonthExp = exprsTok.nextToken().trim();
		monthsExp = exprsTok.nextToken().trim();
		daysOfWeekExp = exprsTok.nextToken().trim();
	}

	/**
	 * 获取表达式秒位置集合
	 * 
	 * @return 秒位置集合
	 */
	public Set getSecondsSet() {
		return seconds;
	}

	/**
	 * 获取表达式秒位置域
	 * 
	 * @return 秒位置域
	 */
	public String getSecondsField() {
		return getExpressionSetSummary(seconds);
	}

	/**
	 * 获取表达式分钟位置集合
	 * 
	 * @return 分钟位置集合
	 */
	public Set getMinutesSet() {
		return minutes;
	}

	/**
	 * 获取表达式分钟位置域
	 * 
	 * @return 分钟位置域
	 */
	public String getMinutesField() {
		return getExpressionSetSummary(minutes);
	}

	/**
	 * 获取表达式小时位置集合
	 * 
	 * @return 小时位置集合
	 */
	public Set getHoursSet() {
		return hours;
	}

	/**
	 * 获取表达式小时位置域
	 * 
	 * @return 小时位置域
	 */
	public String getHoursField() {
		return getExpressionSetSummary(hours);
	}

	/**
	 * 获取表达式天位置集合
	 * 
	 * @return 天位置集合
	 */
	public Set getDaysOfMonthSet() {
		return daysOfMonth;
	}

	/**
	 * 获取表达式天位置域
	 * 
	 * @return 天位置域
	 */
	public String getDaysOfMonthField() {
		return getExpressionSetSummary(daysOfMonth);
	}

	/**
	 * 获取表达式月位置集合
	 * 
	 * @return 月位置集合
	 */
	public Set getMonthsSet() {
		return months;
	}

	/**
	 * 获取表达式月位置域
	 * 
	 * @return 月位置域
	 */
	public String getMonthsField() {
		return getExpressionSetSummary(months);
	}

	/**
	 * 获取表达式星期位置集合
	 * 
	 * @return 星期位置集合
	 */
	public Set getDaysOfWeekSet() {
		return daysOfWeek;
	}

	/**
	 * 获取表达式星期位置域
	 * 
	 * @return 星期位置域
	 */
	public String getDaysOfWeekField() {
		return getExpressionSetSummary(daysOfWeek);
	}

	/**
	 * 获取表达式秒表达式
	 * 
	 * @return 秒表达式
	 */
	public String getSecondsExp() {
		return secondsExp;
	}

	/**
	 * 获取表达式分钟表达式
	 * 
	 * @return 分钟表达式
	 */
	public String getMinutesExp() {
		return minutesExp;
	}

	/**
	 * 获取表达式小时表达式
	 * 
	 * @return 小时表达式
	 */
	public String getHoursExp() {
		return hoursExp;
	}

	/**
	 * 获取表达式日期表达式
	 * 
	 * @return 日期表达式
	 */
	public String getDaysOfMonthExp() {
		return daysOfMonthExp;
	}

	/**
	 * 获取表达式月表达式
	 * 
	 * @return 月表达式
	 */
	public String getMonthsExp() {
		return monthsExp;
	}

	/**
	 * 获取表达式星期表达式
	 * 
	 * @return 星期表达式
	 */
	public String getDaysOfWeekExp() {
		return daysOfWeekExp;
	}
}
